//package com.example.test;
//
//
//import java.util.concurrent.locks.Condition;
//import java.util.concurrent.locks.Lock;
//import java.util.concurrent.locks.ReentrantLock;
///**
// * @author xiejp
// * 题目 :现在两个线程,可以操作初始值为零的一个变量,
// * 实现一个线程对该变量加1 ,一个变量对该变量减1
// * 实现交替,来10轮 变量初始值为零.
// * 1.高内聚低耦合前提下,线程操作资源类
// * 2.判断 /干活 /通知
// *
// */
public class ThreadWaitNotifyDemo {
//
//    public static void main(String[] args) {
//        Resource resource = new Resource();
//        new Thread(()->{
//            for (int i = 0; i < 10; i++) {
//                try {
//                    resource.increment();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        },"生产者1").start();
//        new Thread(()->{
//            for (int i = 0; i < 10; i++) {
//                try {
//                    resource.decrement();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        },"消费者1").start();
//
//        new Thread(()->{
//            for (int i = 0; i < 10; i++) {
//                try {
//                    resource.increment();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        },"生产者2").start();
//        new Thread(()->{
//            for (int i = 0; i < 10; i++) {
//                try {
//                    resource.decrement();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        },"消费者2").start();
//    }
}
class Resource{
//    private int number = 0;
//    private final Lock lock = new ReentrantLock();
//    private final Condition condition = lock.newCondition();
//    public void increment() throws InterruptedException {
//        lock.lock();
//        try {
//            //判断
//            while (!Integer.valueOf(0).equals(number)){
//                condition.await();
//            }
//            //干活
//            number++;
//            System.out.println(Thread.currentThread().getName()+"\t"+number);
//            //通知
//            condition.signalAll();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        } finally {
//            lock.unlock();
//        }
//    }
//    public void decrement()throws InterruptedException{
//        lock.lock();
//        try {
//            while (Integer.valueOf(0).equals(number)){
//                condition.await();
//            }
//            number--;
//            System.out.println(Thread.currentThread().getName()+"\t"+number);
//            condition.signalAll();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        } finally {
//            lock.unlock();
//        }
//
//    }
}
////public synchronized void increment() throws InterruptedException {
////    System.out.println(Thread.currentThread().getName());
////    //1.判断
////    while (!Integer.valueOf(0).equals(number)){
////        this.wait();
////        System.out.println(Thread.currentThread().getName()+"\t"+"线程阻塞");
////    }
////    //2.干活
////    number++;
////    System.out.println(Thread.currentThread().getName()+"\t"+number);
////    //3.通知
////    this.notifyAll();
////};
////public synchronized void decrement() throws InterruptedException {
////    while (Integer.valueOf(0).equals(number)){
////        this.wait();
////        System.out.println(Thread.currentThread().getName()+"\t"+"线程阻塞");
////    }
////    number--;
////    System.out.println(Thread.currentThread().getName()+"\t"+number);
////    this.notifyAll();
////};